package 力扣._72编辑距离;

public class Solution {
    public int minDistance(String s, String t) {
        //删除一个可以等价于给另一个添加
        //dp[i][j]: 以s[i=1]为尾的字符串 编辑为 以t[j-1]的字符串 最少需要dp[i][j]步
        int[][] dp = new int[s.length() + 1][t.length() + 1];
        //初始化dp[i][0]=i, dp[0][j]=j, dp[0][0]=0 , 都为空则不需要编辑,其中一个为空，则需要将另一个全部删除
        for (int i = 0; i <= s.length(); i++) {
            dp[i][0] = i;
        }
        for (int j = 0; j <= t.length(); j++) {
            dp[0][j] = j;
        }
        for (int i = 1; i <= s.length(); i++) {
            for (int j = 1; j <= t.length(); j++) {
                if (s.charAt(i - 1) == t.charAt(j - 1))
                    //当前字符相同，则不需要额外编辑
                    dp[i][j] = dp[i - 1][j - 1];
                else {
                    //删除（等价于增添） //删除两边中的一个
                    dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + 1;
                    //替换   //将当前字符替换为相同的，需要一次操作
                    dp[i][j] = Math.min(dp[i][j], dp[i - 1][j - 1] + 1);
                }
            }
        }
        return dp[s.length()][t.length()];
    }
}
